/**
 * 错误处理中间件
 * 用于统一处理应用中的错误，并返回格式化的错误响应
 */

const errorHandler = (err, req, res, next) => {
  // 记录错误到控制台
  console.error(err);
  
  let error = { ...err };
  error.message = err.message;
  
  // Mongoose错误处理
  
  // 处理Mongoose重复键错误
  if (err.code === 11000) {
    const field = Object.keys(err.keyValue)[0];
    const message = `${field} 已存在，请使用其他值`;
    error = { message };
  }
  
  // 处理Mongoose验证错误
  if (err.name === 'ValidationError') {
    const message = Object.values(err.errors).map(val => val.message).join(', ');
    error = { message };
  }
  
  // 处理Mongoose ID格式错误
  if (err.name === 'CastError') {
    const message = `找不到ID为 ${err.value} 的资源`;
    error = { message };
  }
  
  // 返回错误响应
  res.status(error.statusCode || 500).json({
    success: false,
    message: error.message || '服务器错误'
  });
};

module.exports = errorHandler; 